include "const.thrift"

namespace java com.to8to.thrift.diary.module
namespace php com.to8to.thrift.diary.module

    /** ========== 通用类 ================================================ */
    
struct TSortField
{
    /** 排序字段名 */
    1:string field 
    /** 1:升序,-1:降序 */
    2:i32 asc = 1 
}

struct TRange
{
    /** 最小值 【必填】 */
    1:i32 mini_value 
    /** 最大值 【必填】 */
    2:i32 max_value 
}

struct TImage
{
    /** 图片id， 【必填】 可以是图片的路径/xxx/xxx/xx.jpg */
    1:string id 
    /** 图片规格 1024*768 【必填】 */
    2:string spec 
}

/** 版本识别 */
struct TVersion{
	/** 平台标志 参考const相应平台可选值*/
	1:i32 platform
	/** 版本标志 */
	2:double version
}

struct CreateResponse{
 1:string res="succ"
 2:string _id
 10:string trace_tag
}

struct UpdateResponse{
 1:string res="succ"
 10:string trace_tag
}

struct DeleteResponse
{
    1:string res="succ"
    2:i32 num
 10:string trace_tag
}

    /** ========== 数据模型 ================================================ */
    
    /** 处理机制 */
    struct TDiaryStat 
{
    /** 日记id */
    31:string _id 
    /** 评论数 【异步】 */
    32:i32 comment_num 
	/** 一级评论数 【异步】 */
	2:i32 ref_comment_num
	
    /** 点赞数 【同步】 */
    33:i32 like_num 
    /** 34:double product_price //商品金额总和 【异步】 */
    
    /** 最近变动的时间 【异步】 */
    40:i32 recent_time 
    /** 最近变动事件，2-diary(创建、更新) 4-comment(被回复) 【异步】 */
    41:i32 recent_event 
    /** 变动的发起人id 【异步】 */
    42:string recent_user 
}


    /** 创建时 更新时 */
    struct TDiary 
{
    /** 日记id，自增 【不填】 【不填】 */
    1:string _id 
    /** 现场id 【必填】 【不填】 说明:scene_id不许被update,update相当于在原scene_id下删除，再新scene_id下创建 */
    2:string scene_id 
    /** 作者id 【选填】 【选填】 */
    3:string owner_id 
    /** 大阶段id 【选填】 【选填】 可选值:(1-8) */
    4:i32 progress_id=1 
    /** 小阶段id 【选填】 【选填】 */
    5:i32 tag_id 
    /** 日记内容 【选填】 【选填】 */
    6:string content 


    /** 日记包含的图片 【选填】 【选填】 【详情看大图的地方，建议前端全部根据阶段load进后，整体js操作前后翻页】 */
    7:list<TImage> images 
    /** 图片数量 【不填】 【不填】 */
    8:i32 image_num 
    /** 日记包含的商品id 【选填】 【选填】 */
    9:list<string> products 
    /** 监理id, 【选填】 【选填】 jianli_id>0则表示该日记是监理创建的 */
    10:i32 jianli_id=0 
    /** 日记创建时间 【不填】 【不填】 */
    11:i32 ctime 
    /** 日记事件发生时间 【选填】 【选填】 */
    12:i32 otime 
    /** 日记状态 【不填】 【选填】 若不填则默认为待审核状态； 审核时使用veirify高级接口 */
    13:i32 status 
    /** 日记被驳回理由 【不填】 【在status=4时必填】 */
    14:string remark 
    /** 日记创建平台 【必填】 【选填】 可选值:const.platform */
    15:i32 platform 
    /** 数据来源 【必填】 【选填】 可选值:(1-业主写日记 2-监理写日记 3-运营后台写日记) */
    16:i32 publish_source 
    /** y/n, y:内容字数(content.length)>=100 或者 图片张数(images.size) >= 5; n :内容字数不足100且图片张数不足5【???】 */
    17:string url_type 
    /** 是否是监理的草稿 【选填】 【选填】 可选值:1：是(jianli_id > 0 & status = 2 )，0：否 */
    18:i32 jianli_draft 
    /** 监理日记进度 【选填】 【选填】 */
    19:i32 jianli_stage_id 
    /** 更新时间 【不填】 【不填】 */
    20:i32 utime 
  
    /** 评级,后台用 【选填】 【选填】 */
    23:i32 level 
    /** 【拆分日记用】 【不填】 【不填】 */
    24:string origin_id 
  
    /** 统计 【不填】 【不填】 */
    26:TDiaryStat stat 
  
    /** 【不填】 【选填】 等过滤系统ready后再用 */
    31:i32 filter_result=0 
}

struct TOpTag{
    /** 置顶时间 【必填】 */
    1:i32 top_time 
    /** 标签,颜色 【选填】 */
    2:map<string,string> tags 
}

    /** 处理机制 */
    struct TSceneStat 
{
    /** 现场ID */
    1:string scene_id 
    /** {"1_1":2, "1_2":3} "阶段_状态":统计， 触发：日记变动 【异步】 */
    2:map<string,i32> prog_stat_counts 
    /** {"j":1, "y":3} 监理日记1篇, 业主日记2篇 触发：日记变动 【异步】 */
    3:map<string,i32> owner_counts 
    /** 全部评论数 【异步】 */
    4:i32 comment_num 
	/** 一级评论数 【异步】 */
	11:i32 ref_comment_num
	
    /** 浏览数 【同步】 */
    5:i32 view_num 
    /** 收藏数 【同步】 */
    6:i32 collect_num 
    /** 7:i32 image_num //现场图集的图片数 【异步】 */
    
    /** 8:i32 product_num //清单商品数【用得着?】，跟日记无关 【异步】 */
    
    /** 9:double product_price //商品金额总和，跟日记无关 【异步】 */
    
    /** key : 状态 value : 图片数 */
    7:map<string, i32> image_num 	
	
	/** key : 状态 value : 图片集，只统计n个图片(n<const.MAX_SHOW_IMAGE_NUM) */
    12:map<string, list<TImage>> image_map 
	
    /** key : 状态 value : 商品数 */
    8:map<string, i32> product_num 
    /** key : 状态 value : 商品总价 */
    9:map<string, double> product_price 

    /** 见SCENE_OWNER_XX定义 【异步】 */
    10:i32 owner_type 
 
    /** recent 要显示的 */
    
    /** 最近变动的时间,原来的字段名叫ltime 【异步】 */
    21:i32 recent_time 
    /** 最近变动事件，参见recent_event枚举类型说明 【异步】 */
    22:i32 recent_event 
    /** 变动的发起人 【异步】 */
    23:string recent_user 
	
	24:i32 recent_diary_time   /** 下个版本一定要将recent_event、recent_user、recent_time 建成一个表，而不能只存一个，不然无法支持针对于不同操作的支持 */
}




    /** 创建时 更新时 */
    struct TScene 
{
    /** 现场ID 【不填】 【不填】 */
    1:string _id 
    /** 业主相关 */
    
    /** 业主ID 【选填】 【选填】 */
    2:string owner_id 
    /** 业主名字 【选填】 【选填】 */
    3:string owner_name 
    /** 业主创建的名字 【与name_c选填一项】 【选填】 */
    4:string name_u 
    /** 业主联系方式 【选填】 【选填】 */
    5:string phone 
 
    /** 房子相关 */
    
    /** 城市ID 【选填】 【选填】 */
    11:i32 city_id 
    /** 区域ID 【选填】 【选填】 */
    12:i32 town_id 
    /** 小区ID 【选填】 【选填】 */
    13:i32 comm_id 
    /** 小区名称 【选填】 【选填】 */
    14:string comm_name 
    /** 住房面积 【选填】 【选填】 */
    15:i32 area 
    /** 对应于原预算字段 【选填】 【选填】 */
    16:double budget 
    /** 17:double product_budget //由商品算出 */
    
    /** 装修风格 【选填】 【选填】 可选值：参考const.CONF_STYLE_TYPE 的配置定义 */
    18:list<i32> style 
    /** 户型 【选填】 【选填】 可选值：参考const.CONF_HOUSE_TYPE 的配置定义 */
    19:i32 house_type 
    /** 装修类型_1 【选填】 【选填】 可选值：参考const.CONF_HOME_TYPE_1 的配置定义 */
    20:i32 cgate 
    /** 装修类型_2 【选填】 【选填】 可选值：参考const.CONF_HOME_TYPE_2 的配置定义 */
    21:i32 hometype 
 
    /** 装修公司相关 */
    
    /** 装修公司现场名【owner_id为空时name_c不能为空】【选填】 */
    31:string name_c 
    /** 装修公司ID 【与owner_id选填一项】 【选填】 */
    32:i32 com_id 
    /** 装修公司名字 【选填】 【选填】 */
    33:string com_name 
    /** 装修承包类型 【选填】 【选填】 可选值：参考const.CONF_TYPE_TYPE 的配置定义 */
    34:i32 type_id 
    /** 关联的项目id 【选填】 【选填】 */
    35:string project_id 
    /** 创建时间 【不填】 【不填】 */
    36:i32 ctime 
    /** 开工时间 【选填】 【选填】 */
    37:i32 starttime 
    /** 量房时间 【选填】 【选填】 */
    38:i32 lf_time 
    /** 竣工时间 【选填】 【选填】 */
    39:i32 jg_time 
    /** 工地进度 【选填】 【选填】 可选值：参考const.CONF_GONGDI_TYPE_1 的配置定义 */
    40:i32 gongdijd 
    /** 工地密码 【选填】 【选填】 */
    41:string gpwd 
    /** 中标记录id 【选填】 【选填】 */
    42:i32 zid 
    /** 负责工地的项目经理ID 【选填】 【选填】 */
    43:i32 tid 
    /** 更新时间 【不填】 【不填】 */
    44:i32 utime 
    /** 施工案例数 【选填】 【选填】 施工会更新 */
    45:i32 picnum 
 
    /** to8to相关 */
    
    /** 大阶段 【选填】 【选填】 日记现场不要求有 */
    50:i32 progress_id 
    /** 装修保 【选填】 【选填】 可选值:0:非装修保 1:装修保 */
    51:i32 zxb 
    /** 封面图 */
    52:TImage cover_image 
    /** 封面图_装修公司 */
    69:TImage cover_image_c 
    /** 平台描述 【必填】 【选填】 可选值:const.platform */
    53:i32 platform 
    /** 发布来源 【必填】 【选填】 可选值:1-业主网站创建现场 2-装修公司创建现场 3-CRM提交中标审核通过 */
    54:i32 publish_source 
    /** 精选时间，默认为0 【选填】 【选填】 */
    55:i32 ftime 
    /** 置顶标签<平台,标签> 【选填】 【选填】 string可选值:参考const.platform */
    57:map<string,TOpTag> op_tags 
  
    /** 设计方案 【选填】 【选填】 可选值:参考to8to_case表 */
    58:i32 case_id 
    /** 是否展示到博客首页 【选填】 【选填】 是否展示到博客首页 0:否 >0 是 */
    60:i32 show_index 
    /** 装修日记ID（论坛帖ID）【选填】 【选填】 */
    61:i32 bbs_zx_id 
    /** 监理日记ID（论坛帖ID）【选填】 【选填】 */
    62:i32 bbs_jl_id 
    /** 状态 【不填】 【不填】 审核时使用veirify高级接口 */
    63:i32 status 
    /** 驳回理由 【不填】 【在status=4时必填】 */
    64:string remark 
 
    /** 统计 【不填】 【不填】 */
    66:TSceneStat stat 
    /** 67:list<string> update_raw_fields //由PHP的raw操作导致变化的字段 */
    
    /** 已显示 【不填】 【选填】 */
    68:bool used=false 
 
    /** 过滤系统相关 */
    
    /** 过滤结果,暂时不用 【不填】 【选填】 可选值:0:未审核；1:通过后台审核 */
    70:i32 filter_result=0 
    /** 附带日记 【不填】 【不填】 */
    71:list<TDiary> diaries 
}



struct TDiaryProduct
{
 1:string _id
 5:string diary_id
 10:string product_id 
 15:i32 ctime
}

    /** 创建时 更新时 */
    struct TProduct 
{
    /** ID 【不填】 【不填】 */
    1:string _id 
    /** 现场ID 【必填】 【不填】 */
    2:string scene_id 
    /** 创建时间 【不填】 【不填】 */
    6:i32 ctime 
    /** 更新时间 【不填】 【不填】 */
    7:i32 utime 
    /** 名字 【必填】 【选填】 */
    11:string name 
    /** 品牌 【选填】 【选填】 */
    12:string brand 
    /** 规格 【选填】 【选填】 */
    13:string spec 
 
    /** 备注 【选填】 【选填】 */
    15:string description 
    /** 创建平台 【必填】 【选填】 */
    16:i32 platform 
    /** 数据来源 【必填】 【选填】 可选值:(1-业主写日记 2-监理写日记 3-运营后台写日记) */
    17:i32 publish_source 
    /** 一级分类 【必填】 【选填】 可选值:参考const.CONF_CATE_TYPE_1 的配置定义 */
    21:i32 category_1 
    /** 二级分类 【必填】 【选填】 可选值:参考const.CONF_CATE_TYPE_2 的配置定义 */
    22:i32 category_2 
    /** 【不填】 【不填】 根据category_1和category_2等生成 */
    20:list<i32> category 
 
    /** 购买地_1 【必填】 【选填】 可选值:参考const.CONF_BUY_FROM_TYPE_1 的配置定义 【线上、线下】   2014-12-25 手机端与PC端已完成统一，可修复数据*/
    23:string buy_from_1 
    /** 购买地_2 【必填】 【选填】 可选值:参考const.CONF_BUY_FROM_TYPE_2 的配置定义 2014-12-25 手机端与PC端已完成统一，可修复数据*/
    24:string buy_from_2 
    /** 购买地名字 【必填】 【选填】 可选值:与buy_from_2保持一致 2014-12-25 手机端与PC端已完成统一，可修复数据*/
    25:string buy_from_name 
 
    /** 数量，默认为1 【选填】 【选填】 */
    26:i32 num=1 
    /** 单价 【选填】 【选填】 */
    27:double unit_price 
    /** 总价 【不填】 【不填】 根据unit_price*num生成 */
    28:double total_price 
    /** 相关日记表<id> 【不填】 【不填】 只用于显示时使用 貌似也要加到stat.writer中 */
    29:list<string> diary_list 
 
	/** 业主ID */
	34:string owner_id 
	/** 业主是否喜欢该商品:1.喜欢 2.空 3.不喜欢  alpha.ren 2015-1-21*/
	30:i32 feeling=2
 
    /** 状态 【不填】 【不填】 审核时使用veirify高级接口 */
    31:i32 status 
    /** 驳回理由 【不填】 【在status=4时必填】 */
    32:string remark 
    /** 【不填】 【选填】 等过滤系统ready后再用 */
    33:i32 filter_result = 0 
}

struct TMessage
{
    1:string _id
    /** 事件类型【1-浏览，2-收藏，3-点赞，4-回复】 */
    3:i32 msg_type 
    /** 生成对象的id(如果是事件类型是回复，就代表回复id，如果是点赞、收藏则没有) */
    4:string src_id 

    /** 目标对象id */
    5:string tgt_id 
    /** 目标对象类型 */
    6:i32 tgt_type 
 
    /** 时间 */
    8:i32 ctime 
    /** 谁发起的动作的用户id */
    9:string src_uid 
    /** 被发起动作的用户id */
    10:string tgt_uid 
    /** target用户是否已经删除，参见MSG_TGTDEL_xxx */
    15:i32 tgt_del 
    /** target用户是否已读， 参见MSG_TGTREAD_xxx */
    16:i32 tgt_read 

    /** 日记创建时间 */
    31:i32 diary_otime 
    /** 日记二级标签 */
    32:i32 diary_tag 

    /** 评论创建时间 */
    41:i32 comment_ctime 
    /** 评论内容 */
    42:string comment_content 
}

struct TBehavior
{
 1:string _id   
    /** 用户ID */
    2:string user_id 
    /** 对象ID */
    3:string tgt_id 
    /** 行为类型:【收藏、点赞、浏览】【根据这个来统计某用户的收藏，点赞，浏览内容】 */
    4:i32 bhv_type 
    /** 对象类型：【现场、日记、清单、评论】 */
    5:i32 tgt_type 
    /** 【行为、取消行为】 */
    10:i32 status 

    /** 创建时间 【不填】 */
    15:i32 ctime 
}


struct TUserScore
{
    1:string _id
    /** 发表日记数 */
    3:i32 diary_num=0 
    /** 日记被评论数 */
    4:i32 becomment_num=0 
    /** 发表评论数 */
    5:i32 comment_num=0 
    /** 我的现场被收藏数 */
    6:i32 scene_coll_num=0 
    /** 我的日记被收藏数 */
    7:i32 diary_coll_num=0 
    /** 用户的阶段 */
    8:i32 progress_id=0 
	/** 阶段时间戳 */
	10:i32 progress_stime=0 
	/** 是否已推送 */
	11:i32 progress_notice=0 
    /** 分数 */
    9:i32 score 
}

    /** 创建时 */
    struct TComment 
{
    /** 回复id 【不填】 */
    1:string _id 
    /** 现场id 【必填】 */
    2:string scene_id 
    /** 日记id 【选填】 */
    3:string diary_id 
    /** 商品id 【选填】 */
    4:string product_id 
    /** 现场作者id 【必填】 */
    5:string owner_id 
    /** 回复内容 【必填】 */
    6:string content 
    /** 回复作者 【必填】 */
    7:string user_id 
    /** 被回复对象的类型 【必填】 可选值:(1:现场,2:日记,3:商品清单;4:回复) */
    8:i32 tgt_type 
    /** 原始回复id */
    10:string ref_comment_id 
    /** 原始回复的作者id */
    11:string ref_comment_user_id 
    /** 父回复id */
    12:string parent_comment_id 
    /** 父回复的作者id */
    13:string parent_comment_user_id 
    /** 回复状态， 【不填】 审核时使用veirify高级接口 */
    14:i32 status=1 
    /** 创建时间 【不填】 */
    15:i32 ctime 
    /** 回复来源平台 【必填】 */
    16:i32 platform 
    /** 回复来源 【必填】 */
    17:i32 publish_source 
  
    /** 驳回理由 【在status=4时必填】 */
    19:string remark 
    /** 【不填】 等过滤系统ready后再用 */
    20:i32 filter_result=0 
}

    /** ====================以下为支持显示的数据结构，不做存储======================================================================================================================== */
    

struct TCommentView
{
 1:TComment comment
 2:list<TComment> reply_comment
 3:TDiary reply_diary
}

struct TSceneDiaryView
{
    1:TScene scene
    2:TDiary diary
}

    /** 日记信息View，包含了日记、评论、商品 */
    
struct TDiaryInfoView
{
    1:TDiary diary
    2:i32 total_comment
    3:list<TCommentView> comments
    4:list<TProduct> products
}

struct TStType{
    /** id */
    1:string _id 
    /** 类别等级 */
    2:i32 level 
    /** 父类id */
    3:string parent_type_id 
    /** 大类名 */
    4:string type_name 
    /** id-value值 */
    5:map<string,string> id_map 
}

    /** 以下两个结构为方便nuke使用，会改变 */
    
struct TStElem{
    /** id */
    1:i32 id 
    /** 值 */
    2:string name 
}

struct TStOrderList{
 1:i32 id
    /** 大类名 */
    4:string type_name 
    /** 有序子元素列表 */
    5:list<TStElem> id_list 
}



    /** 小阶段的日记统计 */
    
struct TTagDiaryCount
{
 1:string _id
 2:string name
 3:string parent_id
 4:i32 diary_count
}
    /** 大阶段的日记统计 */
    
struct TProgressDiaryCount
{
    /** 阶段id */
    1:string _id 
    /** 大阶段标签名 */
    2:string name 
    /** 大阶段日记篇数 */
    3:i32 diary_count 
    /** 该大阶段下小阶段的日记统计 */
    4:list<TTagDiaryCount> tag_diary_counts 
}

    /** 现场图集元素 */
    
struct TSceneProgressImgDiaryElem
{
    /**  */
    1:string _id 
 2:list<TImage> images
 3:string content 
    /** 4:list<TCommentView> comments */
    
    /** 小阶段_id */
    5:i32 tag_id 
    /** 小阶段名 */
    6:string tag_name 
}

struct TSceneProgressImgElem
{
    /** 大分类名 */
    1:string type_name 
    /** 大阶段_id */
    2:i32 progress_id 
    /** 大阶段名 */
    4:string progress_name 
    /** 日记列表 */
    6:list<TSceneProgressImgDiaryElem> diarys 
}

    /** 轮单，只需要现场中部分字段 */
    
struct TSceneLundan
{
    1:string _id
    2:i32 com_id
    3:i32 comm_id
    4:list<i32> style
    5:i32 town_id
    6:i32 city_id
}